package day05.Test2;

interface Fruit{
    void eat();
}

class Apple implements Fruit{
    //笔记
    //确保你的 Apple、Orange 和 Banana 类都有一个无参数的构造函数。
    //如果你的类中定义了带参数的构造函数，而没有显式地定义无参数的构造函数，
    //那么 Java 编译器将不会自动生成一个无参数的构造函数。
    public Apple() {
    }
    @Override
    public void eat(){
        System.out.println("eat Apple");
    }
}

class Orange implements Fruit{
    public Orange() {
    }
    @Override
    public void eat(){
        System.out.println("eat Orange");
    }
}

class Banana implements  Fruit{
    public Banana() {
    }
    @Override
    public void eat(){
        System.out.println("eat Banana");
    }
}

class Factory{
    public static Fruit getInstance(String fruitName){
        try {
            Class<?> clazz= Class.forName(fruitName);
            return (Fruit) clazz.getConstructor().newInstance();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
}
//笔记
//确保在调用 Factory.getInstance 方法时传入的类名与实际的类名完全一致，包括大小写。
// 在你的代码中，确保传入的是 "day05.Test2.Apple"、"day05.Test2.Orange" 和 "day05.Test2.Banana"，
// 而不是仅仅 "Apple"、"Orange" 和 "Banana"。
public class Main {
    public static void main(String[] args) {
        Fruit apple = Factory.getInstance("day05.Test2.Apple");
        if (apple!= null) {
            apple.eat();
        }

        Fruit orange = Factory.getInstance("day05.Test2.Orange");
        if (orange!= null) {
            orange.eat();
        }

        Fruit banana = Factory.getInstance("day05.Test2.Banana");
        if (banana!= null) {
            banana.eat();
        }
    }
}